import sun.net.www.http.PosterOutputStream;

import java.util.Arrays;
import java.util.List;

//模拟实现顺序表
public class MyArrayList {
    private int []elem;//用来存放数据
    private int usedSize;//用来记录顺序表中当前有效数字的个数
    private  static  final int DEFAULT_SIZE = 2;
   //构造函数，默认数组的大小
    public MyArrayList(){
        this.elem=new int[DEFAULT_SIZE ];
    }
    //展示该数组中的元素
    public void display(){
        for (int i = 0; i <this.usedSize ; i++) {
            System.out.print(this.elem[i]+" ");

        }
        System.out.println();
    }
    public boolean isFull(){
        if(this.elem.length==this.usedSize){
            return true;
        }
        return  false;
    }

    //新增元素，默认在顺序表的最后位置添加
    public void add(int data){
        if(isFull()){
            this.elem= Arrays.copyOf(this.elem,2*this.elem.length);//需要进一步了解copyof

        }
        this.elem[this.usedSize]=data;
        usedSize++;


    }
    //与上一个形成方法重载  主要是在某位置出添加一个元素，需要判断添加的位置是否合法，以及容量是否够
    public void add(int pos,int data){
        if(pos<0||pos>this.usedSize){
            throw  new PosOutOfBoundsException(pos+"位置不合法！");
        }
        if(isFull()){
            this.elem= Arrays.copyOf(this.elem,2*this.elem.length);//

        }
        for (int i = this.usedSize-1; i >=pos ; i--) {
            this.elem[i+1]=this.elem[i];


        }
        this.elem[pos]=data;
        this.usedSize++;


    }

    //主要用来查看该顺序表中是否包含该元素
    public  boolean contains(int findNum){
        for (int i = 0; i < this.elem.length; i++) {
            if(this.elem[i]==findNum){
                return true;
            }

        }
        return false;

    }
    //用来查找某元素对应的小标位置
    public int indexOf(int findNum){
        for (int i = 0; i < this.elem.length; i++) {
            if(this.elem[i]==findNum){
               return i;
            }
        }
        return -1;

    }
   //得到摸下标的值
    public int get(int pos){
        checkPos(pos);
        return this.elem[pos];
    }
    //修改某下标位置的值
    public  void set(int pos,int value){
        checkPos(pos);
        this.elem[pos]=value;

    }
    //检查位置是否合法
    private  void checkPos(int pos){
        if(pos<0||pos>=this.usedSize){
            throw  new PosOutOfBoundsException(pos+" 位置不合法！");
        }
    }
    //删除某个数据
    public  void remove(int toRemove){
        int index=indexOf(toRemove);
        if(index==-1){
            System.out.println("没有这个数据！");
            return;
        }
        for (int i = index; i <this.usedSize-1 ; i++) {
            this.elem[i]=this.elem[i+1];



        }
        this.usedSize--;

    }
    public  int  size(){
        return this.usedSize;
    }
    public void clear(){
        this.usedSize=0;
    }

    public static void main(String[] args) {
        MyArrayList list=new MyArrayList();
        list.add(1);
        list.add(3);
        list.add(4);
        list.add(7);
        list.add(0);
        list.add(3);
        list.display();
        list.remove(3);
        list.display();

    }

}
